# Copyright (c) 2025, 大连理工大学 (Dalian University of Technology)
#
# Licensed under the Mulan PSL v2.
# You can use this file according to the terms and conditions of the Mulan PSL v2.
# You may obtain a copy of the License at
#
#     http://license.coscl.org.cn/MulanPSL2
#
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. SEE THE MULAN PSL v2
# FOR MORE DETAILS.

cmake_minimum_required(VERSION 3.20)

set(CMAKE_CXX_STANDARD 17)

project(BDFImport LANGUAGES CXX)

# 获取.cpp文件
file(
  GLOB_RECURSE
  _src
  CONFIGURE_DEPENDS
  "BulkData/*.cpp"
  "ControlData/*.cpp"
)

add_library(${PROJECT_NAME}
  ${_src}
  BDFImport.cpp
  BDFParserBase.cpp
  )
  
find_package(Boost REQUIRED CONFIG COMPONENTS filesystem)

# 链接库
target_link_libraries(
  ${PROJECT_NAME}
  PRIVATE Algebra
  PRIVATE Exception
  PRIVATE Configuration
  PRIVATE FileSystem
  PRIVATE Logging
  PRIVATE Stacktrace
  PRIVATE ${Boost_LIBRARIES}
  PRIVATE DataStructure
  PRIVATE DBManager
  )

# 安装设置
install(
  TARGETS ${PROJECT_NAME}
  ARCHIVE DESTINATION lib
  RUNTIME DESTINATION bin)

  install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/BDFImport.h
  DESTINATION include/Import/BDFImport)
  
# 预定义宏
target_compile_definitions(${PROJECT_NAME} PRIVATE EXPORTING_IMPORT)


# 测试
if(SG_BUILD_UNIT_TEST)
  add_subdirectory(UnitTest)
endif()

# 提取卡片数据的可执行文件
# 仅在SG_BUILD_BDFCardExtractor为真时编译
if(SG_BUILD_BDFCardExtractor)
  set(EXE_NAME BDFCardExtractor)

  add_executable(${EXE_NAME}
    ${_src}
    BDFImport.cpp
    BDFParserBase.cpp
    CardExtractor/CardExtractor.cpp
    )
    
  # 链接库
  target_link_libraries(
    ${EXE_NAME}
    PRIVATE Algebra
    PRIVATE Exception
    PRIVATE Configuration
    PRIVATE FileSystem
    PRIVATE Logging
    PRIVATE Stacktrace
    PRIVATE DataStructure
    PRIVATE DBManager
    PRIVATE ${Boost_LIBRARIES}
    )
    
  # 安装设置
  install(
    TARGETS ${EXE_NAME}
    ARCHIVE DESTINATION lib
    RUNTIME DESTINATION bin)

  target_compile_definitions(${EXE_NAME} PRIVATE CARD_EXTRACT)
  set_target_properties(${EXE_NAME} PROPERTIES OUTPUT_NAME "bdf_card_extractor")

endif()